package com.ruoyi.common.core.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.ruoyi.common.core.domain.BaseEntity;

import java.io.Serializable;
import java.util.Collection;

/**
 * @Classname ICustomService
 * @Author: sunluquan
 * @Date: 2021/12/24 08:18
 * @Description TODO
 * 顶级 Service 的自定义扩展
 */
public interface ICustomService<T extends BaseEntity> extends IService<T> {
    /**
     * 默认批次提交数量
     */
    int DEFAULT_BATCH_SIZE = 1000;

    /**
     * 根据 entity 条件，逻辑删除此记录
     *
     * @param queryWrapper 实体对象封装操作类（可以为 null,里面的 entity 用于生成 where 语句）
     * @return 受影响行数
     */
    int logicDelete(Wrapper<T> queryWrapper);

    /**
     * 根据 ID 逻辑删除此纪录
     *
     * @param id 主键ID
     * @return 返回受影响行数
     */
    int logicDeleteById(Serializable id);

    /**
     * 根据 ID集合 逻辑删除此纪录
     *
     * @param ids 主键ID集合
     * @return 返回受影响行数
     */
    int logicDeleteBatchByIds(Collection<? extends Serializable> ids);

    /**
     * 根据 ID 将标记为删除 置为 未删除标识
     *
     * @param id 主键ID
     * @return 返回受影响行数
     */
    int recoverById(Serializable id);

    /**
     * 根据 IDs 将标记为删除 置为 未删除标识
     *
     * @param ids 主键ID集合
     * @return 返回受影响行数
     */
    int recoverBatchByIds(Collection<? extends Serializable> ids);

}
